#ifndef _STRAWGUI_LINK_TO_H_
#define _STRAWGUI_LINK_TO_H_

#include "DataBase.h"

namespace sgui
{
	class sGUI;

	template < class T >
	class sLinkTo: public sSaveable
	{
	private:
		T*				m_data;
		sGUI&			m_gui;
	public:
		void save(db::Record& file) const
		{
			if (m_data)
			{
				file.Set((u32)m_data->getID());
			}
			else
			{
				file.Set((u32)0);
			}
		}

		void load(const db::Record& file) 
        {
			sSaveable::load(file);
			m_data = (T*)m_gui.getGuiObject((ID)file.GetAsInt());
        }

		T* get()
		{
			return m_data;
		}

		const T* get() const
		{
			return m_data;
		}

		void set(T* data)
		{
			m_data = data;
		}

		void clear()
		{
			m_data = NULL;
		}

		sLinkTo(sGUI& gui) :
			m_data(NULL),
            m_gui(gui) {}

		sLinkTo(sGUI& gui, T* data) :
			m_data(data),
			m_gui(gui) {}
	};
};

#endif